#include "String.h"
#include "String.cc"

namespace noria
{
	class StringTP final : public IString
	{
	public:
		virtual IString* Concat(const char* value) override
		{
			return nullptr;
		}
		virtual int IndexOf(const char* value) const override
		{
			return -1;
		}
		virtual int IndexOf(char value) const override
		{
			return -1;
		}
	public:
		virtual void Dispose() override
		{
			delete this;
		}
		virtual const IType* const GetType() const override
		{
			return GetStringType();
		}
		virtual IReflectable* Invoke(const char* name, IReflectable** args) override
		{
			// TODO:
			return nullptr;
		}
	private:
		//String m_impl;
	private:
		friend const IType* const GetStringType();
		class Type final : public IType
		{
		public:
			virtual void Dispose() override
			{
			}
			virtual IReflectable* CreateInstance() const override
			{
				return nullptr;
			}
			virtual const char* const GetName() const override
			{
				return "String";
			}
			virtual const char* const GetFullName() const override
			{
				return "noria.String";
			}
		};
	};

	const IType* const GetStringType()
	{
		static StringTP::Type type;
		return &type;
	}
}

